iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1
DevOps

用 CDK 定義 AWS 架構系列 第 9

Day 9 - 部署靜態網頁 (番外篇)

  • 分享至 

  • xImage
  •  

在昨天的靜態網頁教學中還沒說明限制的部分,今天準備了幾個問題來回答

https://ithelp.ithome.com.tw/upload/images/20200925/20117701j0DMhuAFMC.jpg

問題列表

  • 在昨天的教學文件裡面有提到如果要使用 acm.Certificate 需要切換 Region 到 us-east-1 這是為什麼呢?
  • 我們竟然都使用 CDK 了,那可不可以讓 ACM 在 us-east-1 而其他服務在不同區呢?

在昨天的教學文件裡面有提到如果要使用 acm.Certificate 需要切換 Region 到 us-east-1 這是為什麼呢?

這是因為 CloudFront 使用 ACM 有限制條件,我們可以在 AWS 文件裡面找到
如果要使用 CloudFront 必須使用 US East (N. Virginia) 區域的憑證

我們竟然都使用 CDK 了,那可不可以讓 ACM 在 us-east-1 而其他服務在不同區呢?

類似的問題其實在 2020/07/28 有被提出過 [aws-certificatemanager] Create certificate in us-east-1 and use it in a different region #9274

簡單說明一下這則 issue 的內容

這位作者想要創建 AWS Cognito 的服務而他的 CDK stack 在 eu-central-1,如果要使用自定義網域憑證需要在 us-east-1 要如何分享憑證到 AWS Cognito.

AWS 人員給予的回應簡述

  1. 使用兩個不同的 CDK stack 來處理
  2. 使用 acm.CertificateValidation 來處理

方法一:以目前來說不可行,目前在 Certificates ARN 還沒有解法,可以在此 commit 看到詳細說明
方法二:限制只有使用 Route53 的使用者可以使用此解法

談討為什麼 acm.Certificate 不可以指定 Region 而 acm.CertificateValidation 可以指定

首先先看 CDK 文件可以看到 Certificate 的 class 裡面沒有可以填入 region 的地方,而 DnsValidatedCertificate 有一個 Construct Props region

分析 Certificate 實作

我們到 Github 看一下 Certificate 的實作方法
首先看到 import 的地方只有 route53, core 與 certificatemanager.generated

特別說明一下 certificatemanager.generated 代表 AWS CloudFormation-only 或稱 L1 也就是它是原生的 CloudFormation 可參考文件

因此可以知道 Certificate 只有使用原生的 CloudFormation

import * as route53 from '@aws-cdk/aws-route53';
import { Construct, IResource, Resource, Token } from '@aws-cdk/core';
import { CfnCertificate } from './certificatemanager.generated';
import { apexDomain } from './util';

分析 DnsValidatedCertificate 實作

先看到 Github DnsValidatedCertificate 的實作方法,一樣我們可以從 import 先做概略分析它有一個 lambda 代表這邊的功能有人會用它實作

import * as path from 'path';
import * as iam from '@aws-cdk/aws-iam';
import * as lambda from '@aws-cdk/aws-lambda';
import * as route53 from '@aws-cdk/aws-route53';
import * as cdk from '@aws-cdk/core';
import { CertificateProps, ICertificate } from './certificate';

再來我們往下看到 L76-L94 就可以看到這邊有一個 Lambda 的呼叫檔案位置在

path.resolve(__dirname, '..', 'lambda-packages', 'dns_validated_certificate_handler', 'lib')

也就是 dns_validated_certificate_handler/lib/index.js 而輸入 region 的位置在 L241
因此使用 DnsValidatedCertificate 才可以輸入 region 位置,不然依造目前 CloudFormation 的特性是沒辦法跨 region 的

今日主要帶大家簡單的看一下 CDK Source code 有個體驗,希望今天的分享有幫到大家

想要看更多嗎?歡迎到我的部落格參觀

文章內容主要是網路或是程式開發類型的文章

本文同步刊載於 Clarence 部落格:Day 9 - 部署靜態網頁 (番外篇)


「AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC」
本書改編並延伸自第 12 屆 iT 邦幫忙鐵人賽獲得 DevOps 組冠軍的《用 CDK 定義 AWS 架構》系列文章,以簡單、好讀的行文風格詳述技術細節,並提供完整的程式碼範例與說明,一步一步帶領新手從零開始踏上 AWS CDK 技術達人之路。

有興趣的朋友歡迎至天瓏書局選購!

購書連結 https://bit.ly/2ZMAebE

https://ithelp.ithome.com.tw/upload/images/20211103/20117701W7l6fQnn2L.jpg


上一篇
Day 8 - 部署靜態網頁
下一篇
Day 10 - 使用 CDK 部署 EC2
系列文
用 CDK 定義 AWS 架構30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言